package com.ddh.codeduck.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.AsyncConfigurer;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

import java.util.concurrent.Executor;

/**
 * 异步任务配置类
 */
@Configuration
@EnableAsync    // 启用 Spring 异步任务支持
public class AsyncConfig implements AsyncConfigurer {

    /**
     * 自定义异步任务线程池 Bean
     * Bean 名称为 "taskExecutor"，与 @Resource 注入时的名称匹配
     *
     * @return Executor 线程池实例
     */
    @Bean("taskExecutor")
    public Executor getAsyncExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        // 核心线程数（长期保留的线程数，默认不销毁）
        executor.setCorePoolSize(10);
        // 最大线程数（当队列满时扩容到的最大线程数）
        executor.setMaxPoolSize(20);
        // 任务队列容量（核心线程忙时新任务进入队列等待）
        executor.setQueueCapacity(500);
        // 线程名称前缀（日志中可区分线程来源）
        executor.setThreadNamePrefix("TagAsync-");
        // 初始化线程池
        executor.initialize();
        return executor;
    }
}


